package com.tianji.learning.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;
import com.tianji.common.enums.BaseEnum;
import lombok.Getter;

/**
 * 课程状态枚举
 */

@Getter
public enum LessonStatus implements BaseEnum {
    NOT_BEGIN(0, "未学习"),
    LEARNING(1, "学习中"),
    FINISHED(2, "已学完"),
    EXPIRED(3, "已过期"),
    ;
    @JsonValue // 指定JSON序列化用的值以value的值为准 就是对象转为JSON数据
    // 并且这里转换必须使用jackson转换器  FastJson转换器不支持
    @EnumValue // 与数据库交互时要做类型转换的值
    // 作用mybatisPlus在保存db时候会把枚举的value值存入数据库
    final
    int value;
    final String desc; // 枚举类的属性必须是final

    LessonStatus(int value, String desc) {
        this.value = value;
        this.desc = desc;
    }

    // 指定JSON反序列化时使用的函数
    @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
    public static LessonStatus of(Integer value) {
        if (value == null) {
            return null;
        }
        for (LessonStatus status : values()) {
            if (status.equalsValue(value)) {
                return status;
            }
        }
        return null;
    }
}
